能否把Linux内核部分固化并运行在FPGA上,或者直接流片成ASIC,以提高运行效率? | 您所在的位置:网站首页 › ubuntu 查看内核 › 能否把Linux内核部分固化并运行在FPGA上,或者直接流片成ASIC,以提高运行效率? |
理论很丰满,现实很骨感。 这个问题本质上是软件和硬件的体系划分。 有很多算法可以用软件实现,也可以用硬件实现。 比如可以在软件上跑一个h264的算法,可以找到C的(软件实现),也可以找到verilog(硬件实现)。 的确有些算法即适合软件来实现,通过C在CPU的编程,灵活啊。 也适合硬件来做,例如FPGA/ASIC,高速啊。 还适合软硬结合来实现,例如CPU带MMX扩展指令,也可以加速h264的速度,还保持了灵活性。 所以,我们看到这几种方式,处理器实现效率低,ASIC/FPGA实现不灵活。 所以就出现了很多DSA架构,面向领域的定制的处理器,综合了灵活性和高性能,比如可以定制一个面向视频处理方面的处理器,可以处理目前所有的编码协议,264,265,包括AVS等等。 回头题目上来,我们说linux内核能不能用ASIC/FPGA实现。 答案既不可行,又无必要 大约10年前,我曾经在FPGA上装上openrisc,当时就裁剪了一个linux的最小的内核放进去,大约8M的bin文件,最后把系统成功启动起来。 这实际上就是软件在cpu上跑的当时启动了linux的内核。 当然不是用FPGA/ASIC技术来实现linux,也就是linux的硬化。 那为什么不能用FPGA/ASIC实现内核的一部分。 我们先看看linux的内核都有哪些组件? 1:进程管理:内核管理用户空间程序的执行,创建和管理进程,为每个进程调度CPU时间,处理进程间通信。 2:内存管理:内核管理内存向用户空间程序的分配和释放。 3:设备驱动:内核为设备驱动程序提供接口,负责管理系统的硬件组件,如网络适配器、存储设备和显示适配器。 4:文件系统:内核提供文件系统支持,包括读写各种类型文件系统的能力。 5:访问控制:内核提供访问控制、权限管理等安全特性,确保用户空间的程序无法进行未授权的操作。 上面这5点都强调是灵活性,并且和CPU是紧密耦合的关系。 我们拿设备驱动举例,仅仅是一个串口驱动,如果用ASIC/FPGA(verilog)实现内核里面printK函数,这个难度就是顶天的。需要考虑多少个字符串,多少种字符串,字符串的拼接,字符串如何转换,这个比用verilog来写基本上难度比写一个串口模块大好几个数量级。 并且最主要的是,更重要的是用verilog费这么大力气实现这么个东西,和软件的printk函数相比完全没有什么优势。 就是串口打印个数,这么做非常的不灵活,也不高效(串口速率决定了!)。 完全没有用。 完全没有用。 完全没有用。 重要的事情说三遍。 翻看内核各种函数,这还是一个最简单的printk,除此之外有上万个类似的函数,这些函数之间还有错综复杂的调用关系。要知道verilog的调用可真的是模块的复制啊,这种实现简直不敢想象。 用verilog写完,变成FPGA/ASIC完全是不可行的。 因此不论是进程管理,内存管理,设备驱动,文件系统,访问控制等等,这些都是为了CPU更灵活被应用而发明出来的。 linux和CPU是共生关系,但凡翻看过linux内核的C代码的,就会明白linux内核是完全不适合ASIC/FPGA用实现的。 那说到这里,那这个题目问的难道没有意义吗? 有的? 虽然不能将liunx内核固化在FPGA/ASIC上,但是,内核里面一些运行的瓶颈完全可以通过硬件加速的方式来优化。 例如: 1:设备驱动里面就用很多硬件加速开关,通过开启这些硬件加速开关,内核就能少做很多的工作,减少指令消耗。 2:指令加速,目前SIMD的指令在内核中也经常被调用,翻开各种CPU版本的linux的内核也能看到这一点。 这些都是内核加速的一些方式,提升内核运行的效率。 但是这些加速有必要,硬件替代完全不可行,不必要。 软件和硬件尤其自然的分解,虽然很多时候一些地方处于模糊的地带,但是毫不疑问,linux内核就是软件实现最基础的那块基石。 |
CopyRight 2018-2019 实验室设备网 版权所有 |